Autor: Untitled
Cel:   Crackme dos by noname / AAOCG
Czym:  SI

Dawno minely czasy swietosci DOS(jak sobie po wspominam to mi sie lezka kreci), ale
noname napisal Crackmeka wlasnie pod tego staruszka, za co bardzo mu dziekuje :).
Dobra starczy czulosci.

Go!

Hmm.. jak tu sie za niego zabrac - rzadny API, no ale sa przerwania (INT) i wlasnie na nie,
a mianowice na przerwanie DOS-u - 21h, zakladamy pulapke poleceniem:

bpint #21

uruchamiamiy crackmeka i w SI teraz CRTL+D dopuki nie znajdziesz sie tu:

 MOV AH,0A      |
 MOV DX,01AE    |----> pobiera haslo
 INT 21h        |
 MOV AX,1B0    
 ADD AL,[01AF] 
 DEC AL                   <---- w AL ostatni znak naszego hasla
 MOV DI,1B0               <---- w DI nasze haslo
 XOR WORD PTR [DI],BEBA   <---- XOR-uje 2 bajty naszego hasla z BEBA
 INC DI
 CMP DI,AX                <---- sprawdza czy ostatni znak
 JL  skok do XOR-a
 MOV SI,0157              <---- hmm.. jakis dziwny ciag znakow
 MOV DI,01B0              <---- wykalkulowane nasze haslo, gotowe do porownania
 MOV AL,[SI]                       |
 MOV BL,[DI]  			   |
 CMP AL,BL			   |
 JNZ Bad boy go away !!!	   |----> procka sprawdzajaca	
 CMP AL,DB                         |----> sprwadza AL z ostatnim znakiem "zakodowanego",poprawnego hasla
 JNZ good boy!                     |
 INC SI				   |
 INC DI				   |
 JNZ poczatek procki sprawdzajacej | 
  
Caly algorytm kalkulacji hasla opiera sie na XOR-owaniu 2 bajtow naszego hasla z BEBAh ale
DI(nasze haslo) nie jest zwiekszane o 2 tylko o 1, wiec kadzy bajt XOR-owany jest w sumie 
2 razy, no oprocz pierwszego i ostatniego.

Procedura sprawdzajaca, sprawdza kazda litere naszego(juz z XOR-owanego) hasla z znakiem z SI
a mianowice:

CA 6C 61 24 45 45 4B 47 43 24 67 76 65 67 6F 69 DB <--- 17 znakow!

jezeli wiem to wszystko wystarczy wiliczyc prawodlowe haslo:

CA6C xor BEBA = 74D6 <-- D6h to bylo 6Ch, a 74h pierwszy znak poprwnego hasla
D661 xor BEBA = 68DB <-- DBh to bylo 61h,   61h drugi znak 
DB24 xor BEBA = 659E <-- 9Eh to bylo 24h,   65h trzeci znak 

itd. az do:

D569 xor BEBA = 6BD3
D3DB xor BEBA = 6D61 <-- 6Dh to przedostatnia, 16 litera hasla

Aby policzyc ostatnia litere mozna, przed ty jak program z XOR-uje ja z BEBAh zamniec
wlasnie na DBh, powinno wyjsc 65h

poprawne haslo to:

74 68 65 20 41 41 4F 43 47 20 63 72 61 63 6B 6D 65

czyli:

the AAOCG crackme

powinna przywitac nas informacja Great work!

greatings dla wszystkich czytajacych te wypociny, wszystkie uwagi wal pod untitledcrc@go2.pl

                              -=[CRACKING SOLIS SATERBOTIBUS]=-

-=E.O.F=-